#include <iostream>
#include "../CImg/CImg.h"
using namespace std;
using namespace cimg_library;

int main(int argc, char *argv[]) {
	CImg<unsigned char> img, subImg; // la imagen y la subimagen 
	CImgDisplay displayImagenOrig, displaySubImg; // display para las 2 imagenes
	
	// cargamos la imagen
	img.load("../img_test/huang2.jpg");
	displayImagenOrig.assign(img);
	
	
	unsigned x0, y0, x1, y1; // coordenadas de la subimagen
	bool dragging=false; // para saber si estamos haciendo la seleccion
	while(!displayImagenOrig.is_closed()){
		displayImagenOrig.wait_all(); // esperamos algun evento en cualquiera de los 2 displays
		if(!dragging && displayImagenOrig.button()!=0){ // empieza el drag
			x0=displayImagenOrig.mouse_x();
			y0=displayImagenOrig.mouse_y();
			dragging=true;
		}else if(dragging && displayImagenOrig.button()==0){ // termina el drag
			x1=displayImagenOrig.mouse_x();
			y1=displayImagenOrig.mouse_y();
			dragging=false;
			subImg=img.get_crop(x0, y0, x1, y1);
			subImg.print(); // imprimir stats p/saber si habiamos sacada bien el tamano de la subimagen
			cout<<"Subimagen: "<<x1-x0+1<<"x"<<y1-y0+1<<endl; 
			cout<<"Tamanio: "<<((x1-x0+1)*(y1-y0+1)*3)/1024.0<<" Kbytes "<<((x1-x0+1)*(y1-y0+1)*3)<<"bytes"<<endl<<endl;
			displaySubImg.assign(subImg); // reabre el display de la subimagen
		}
		
		if(!displaySubImg.is_empty() && displaySubImg.is_key('s')){ // presionamos 's' sobre el display de la subimagen
			cout<<"Saving subimg.bmp..."<<endl;
			subImg.save_raw("subimg.raw");	// guardamos la imagen
			// ??? el tamanio en disco da parecido pero no exactamente igual al que calculamos...
		}
	}
	
	return 0;
}

